package cn.com.gridinfo.sooc.core.course.discuss;

import android.app.Service;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

import com.jeremy.arad.Arad;
import com.jeremy.arad.utils.Log;
import com.jeremy.arad.utils.StringUtils;
import com.marshalchen.ultimaterecyclerview.UltimateRecyclerView;

import java.util.ArrayList;
import java.util.List;

import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnCheckedChanged;
import cn.com.gridinfo.sooc.R;
import cn.com.gridinfo.sooc.base.BaseSoocFragment;
import cn.com.gridinfo.sooc.common.LocalMark;
import cn.com.gridinfo.sooc.core.course.classes.bean.CourseDetailsInfo;
import cn.com.gridinfo.sooc.core.course.discuss.adapter.DiscussAdapter;
import cn.com.gridinfo.sooc.core.course.discuss.bean.Discuss;
import cn.com.gridinfo.sooc.core.course.note.common.CodeConst;
import cn.com.gridinfo.sooc.core.course.note.dao.CourseDao;
import cn.com.gridinfo.sooc.core.expand.callname.common.PageConst;
import cn.com.gridinfo.sooc.utils.MessageUtils;

/**
 * 课程——讨论界面   综合：课程级   章节：节级
 * Created by yingchunli on 2015/12/30.
 */
public class DiscussFragment extends BaseSoocFragment {

    View view;//当前界面
    @InjectView(R.id.all_discuss)
    RadioButton allDiscuss;//综合讨论区的按钮
    @InjectView(R.id.jie_discuss)
    RadioButton jieDiscuss;//本章节交流区的按钮
    @InjectView(R.id.discuss_list)
    UltimateRecyclerView discussList;//列表
    @InjectView(R.id.tab_layout)
    RadioGroup mRadioGroup;

    //无数据页面
    @InjectView(R.id.ll_no_data)
    LinearLayout layoutNoData;
    @InjectView(R.id.iv_no_data)
    ImageView ivNoData;
    @InjectView(R.id.tv_no_data)
    TextView tvNoData;
    @InjectView(R.id.tab_container)
    LinearLayout tabContainer;//讨论标签区域修改

    private EditText editText;


    LinearLayoutManager linearLayoutManager;//布局管理器
    DiscussAdapter adapter;//适配器
    String kcid, pmlid, mlid, nrid;//课程id 章id  节id   素材id
    private int isAuth, isEncrypt, kcsd, select, kcls;//是否有权限（0无权限，1有权限）是否加密（ 0：未加密 1：已加密  ）,课程锁定（0：未锁定 1：已锁定）,课程加入（0：未加入 1：已加入）,制作人 (0 不是制作人 1是制作人)
    int maxLastPositon;//最后分页位置
    CourseDao dao;
    private PopupWindow popWindow;
    private boolean isZonghe = false;
    private  final String ENCRYPT = "课程已加密，讨论待解密~";
    private  final String KCSD = "课程未开放，讨论已被封印~";
    private  final String NO_DATA = "还没有相关讨论信息，赶紧发表吧~";

    public static DiscussFragment newInstance(CourseDetailsInfo courseInfo) {
        Bundle args = new Bundle();
        DiscussFragment fragment = new DiscussFragment();
        args.putSerializable("courseInfo", courseInfo);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.course_discuss, null);
        ButterKnife.inject(this, view);
        Arad.bus.register(this);
        dao = new CourseDao(this);
        initView();//初始化列表页面
        discussList.showFloatingButtonView();
        discussList.displayCustomFloatingActionView(true);
        view.findViewById(R.id.floatingbutton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("floatingbtn  onClick");
                //发送讨论
                showPopView();
            }
        });

        CourseDetailsInfo courseInfo = (CourseDetailsInfo) getArguments().get("courseInfo");
        loadData(courseInfo);
        return view;
    }

    /**
     * 显示无数据页面
     *
     * @param msg 要显示的提示信息
     */
    private void showNoData(String msg) {
        layoutNoData.setVisibility(View.VISIBLE);
        ivNoData.setImageResource(R.mipmap.ic_biji_no_data);
        tvNoData.setText(msg);
        discussList.showEmptyView();
    }

    /**
     * 更新课程信息
     *
     * @param courseInfo 课程信息
     */
    public void onEventMainThread(CourseDetailsInfo courseInfo) {
        //获取参数 课程详情记录
        loadData(courseInfo);
    }

    private void loadData(CourseDetailsInfo courseInfo) {
        //发送请求  获取列表数据
        kcid = courseInfo.getKcid();//课程ID
        pmlid = courseInfo.getCurrPmId();//章 id
        mlid = courseInfo.getCurrMlId();//节 id
        nrid = courseInfo.getCurrNrId();//内容 id
        isAuth = courseInfo.getIsAuth();//权限 1 有权限 0 无权限
        isEncrypt = courseInfo.getIsEncrypt();//是否加密（ 0：未加密 1：已加密  ）
        kcsd = courseInfo.getKcsd();//课程锁定（0：未锁定 1：已锁定）
        select = courseInfo.getSelect();//课程加入（0：未加入 1：已加入）
        kcls = courseInfo.getKcls();//制作人 (0 不是制作人 1是制作人)

        //未开放
        if (kcsd == 1) {
            //课程锁定
            mRadioGroup.setVisibility(View.GONE);
            tabContainer.setVisibility(View.GONE);
        }
        //课程开放
        else {
            //当前章节为空时，定位不到张倩章节
            if (mlid == null) {
                mRadioGroup.setVisibility(View.GONE);
                tabContainer.setVisibility(View.GONE);
            } else {
                //制作人
                if (kcls == 1) {
                    //制作人
                    mRadioGroup.setVisibility(View.VISIBLE);
                    tabContainer.setVisibility(View.VISIBLE);
                }
                //课程收费
                else if (Arad.preferences.getBoolean(LocalMark.IS_PAY.getName())&&courseInfo.getIs_charge().equals("1")){
                    if (courseInfo.getIsBuy()==0||courseInfo.getIsBuy()==2){
                        //课程未购买
                        mRadioGroup.setVisibility(View.GONE);
                        tabContainer.setVisibility(View.GONE);
                    }else {
                        //课程购买
                        mRadioGroup.setVisibility(View.VISIBLE);
                        tabContainer.setVisibility(View.VISIBLE);
                    }
                }
                //已加入课程
                else if (select == 1) {
                    mRadioGroup.setVisibility(View.VISIBLE);
                    tabContainer.setVisibility(View.VISIBLE);
                }
                else if (isAuth == 1) {
                    mRadioGroup.setVisibility(View.VISIBLE);
                    tabContainer.setVisibility(View.VISIBLE);
                }
                //未加入课程
                //无权限
                else if (isAuth == 0) {
                    mRadioGroup.setVisibility(View.GONE);
                    tabContainer.setVisibility(View.GONE);
                }
                //加密
                else if (isEncrypt == 1) {
                    mRadioGroup.setVisibility(View.GONE);
                    tabContainer.setVisibility(View.GONE);
                } else {
                    mRadioGroup.setVisibility(View.VISIBLE);
                    tabContainer.setVisibility(View.VISIBLE);
                }
            }
        }
        PageConst.pageNo = 1;
        if (mRadioGroup.getVisibility() == View.VISIBLE) {
            //有章节讨论区，默认显示章节讨论区内容
            getData(kcid, pmlid, mlid, CodeConst.COURSE_GET_COURSE_DISCUSS_PUSHDOWN);
            jieDiscuss.setChecked(true);
        } else {
            //无章节讨论区，默认显示全部讨论
            getData(kcid, null, null, CodeConst.COURSE_GET_COURSE_DISCUSS_PUSHDOWN);
        }

    }

    private void getData(String kcid, String pmlid, String mlid, int requestCode) {
        discussList.hideEmptyView();
        dao.getCourseDiscuss(kcid, pmlid, mlid, PageConst.pageNo, PageConst.pageSize, requestCode);
    }

    /**
     * 综合讨论区的选中状态改变
     */
    @OnCheckedChanged(R.id.all_discuss)
    void onCheckedChanged1() {
        if (allDiscuss.isChecked()) {
            //发送请求  获取列表数据
            isZonghe = true;
            PageConst.pageNo = 1;
            getData(kcid, null, null, CodeConst.COURSE_GET_COURSE_DISCUSS_PUSHDOWN);
        }
    }

    /**
     * 本章节交流区的选中状态改变
     */
    @OnCheckedChanged(R.id.jie_discuss)
    void onCheckedChanged2() {
        if (jieDiscuss.isChecked()) {
            //发送请求  获取列表数据
            isZonghe = false;
            PageConst.pageNo = 1;
            if (pmlid != null) {
                getData(kcid, pmlid, mlid, CodeConst.COURSE_GET_COURSE_DISCUSS_PUSHDOWN);
            } else {
                //显示无数据页面
                showNoData(NO_DATA);
            }

        }
    }

    /**
     * 初始化列表数据
     */
    private void initView() {
        //初始化list
        linearLayoutManager = new LinearLayoutManager(getActivity());
        discussList.setLayoutManager(linearLayoutManager);
        List<Discuss> discusseList = new ArrayList<>();
        adapter = new DiscussAdapter(discusseList, getActivity());
        discussList.setAdapter(adapter);

        discussList.enableLoadmore();

        discussList.setDefaultOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                //下拉刷新 账户明细数据
                PageConst.pageNo = 1;//首页
                if (isZonghe) {
                    //综合
                    getData(kcid, null, null, CodeConst.COURSE_GET_COURSE_DISCUSS_PUSHDOWN);
                } else {
                    //章节
                    getData(kcid, pmlid, mlid, CodeConst.COURSE_GET_COURSE_DISCUSS_PUSHDOWN);
                }
                linearLayoutManager.scrollToPosition(0);
            }
        });
        discussList.setOnLoadMoreListener(new UltimateRecyclerView.OnLoadMoreListener() {
            @Override
            public void loadMore(final int itemsCount, final int maxLastVisiblePosition) {
                if (itemsCount > (PageConst.pageSize - 1)) {
                    maxLastPositon = maxLastVisiblePosition;
                    ++PageConst.pageNo;
                    if (isZonghe) {
                        //综合
                        getData(kcid, null, null, CodeConst.COURSE_GET_COURSE_DISCUSS_PULLUP);
                    } else {
                        //章节
                        getData(kcid, pmlid, mlid, CodeConst.COURSE_GET_COURSE_DISCUSS_PULLUP);
                    }

                } else {
                    //加载数据完成,没有更多数据,显示没有更多了
                    adapter.loadNoDataView();
                    linearLayoutManager.scrollToPositionWithOffset(maxLastVisiblePosition, -1);
                }
            }
        });
    }

    InputMethodManager imm;

    /**
     * 发讨论
     */
    private void showPopView() {
        // TODO: 2016/1/6 发讨论
        showPopup(view);
        popupInputMethodWindow();


    }

    /**
     * 弹出输入框
     * @author lijie
     * @editdate 2016-6-16
     *
     * @param parent
     */
    private void showPopup(View parent) {
        if (popWindow == null) {
            LayoutInflater layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = layoutInflater.inflate(R.layout.course_discuss_send_dialog, null);
            editText = (EditText) view.findViewById(R.id.discuss_nr);
            view.findViewById(R.id.btn_send_discuss).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //回复讨论
                    String content = editText.getText().toString().trim();
                    if (!StringUtils.isNull(content)) {

                        //制作人 || 已经加入课程，或者有权限
                        if (kcls == 1 || select == 1 || isAuth == 1) {
                            dao.sendDiscuss(kcid, pmlid, mlid, nrid, editText.getText().toString(), CodeConst.COURSE_GET_COURSE_SEND_DISCUSS);

                        }
                        //未加入课程
                        //无权限
                        //非制作人 无权限时候发送课程讨论的时候 只传课程ID
                        else if (isAuth == 0) {
                            dao.sendDiscuss(kcid, "", "", "", editText.getText().toString(), CodeConst.COURSE_GET_COURSE_SEND_DISCUSS);

                        }
                        //加密
                        else if (isEncrypt == 1) {
                            dao.sendDiscuss(kcid, "", "", "", editText.getText().toString(), CodeConst.COURSE_GET_COURSE_SEND_DISCUSS);

                        }
                        //非加密
                        else {
                            dao.sendDiscuss(kcid, pmlid, mlid, nrid, editText.getText().toString(), CodeConst.COURSE_GET_COURSE_SEND_DISCUSS);

                        }

                    } else {
                        MessageUtils.showImageShortToast(getActivity(), "请输入讨论的内容");
                    }
                }
            });
            // 创建一个PopuWidow对象
            popWindow = new PopupWindow(view, LinearLayout.LayoutParams.FILL_PARENT,
                    getResources().getDimensionPixelSize(R.dimen.md_button_height) +
                            getResources().getDimensionPixelSize(R.dimen.edge_margin) + 2, true);
        }
        //popupwindow弹出时的动画		popWindow.setAnimationStyle(R.style.popupWindowAnimation);
        // 使其聚集 ，要想监听菜单里控件的事件就必须要调用此方法
        popWindow.setFocusable(true);
        // 设置允许在外点击消失
        popWindow.setOutsideTouchable(false);
        // 设置背景，这个是为了点击“返回Back”也能使其消失，并且并不会影响你的背景
        popWindow.setBackgroundDrawable(new BitmapDrawable());
        //软键盘不会挡着popupwindow
        popWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        //设置菜单显示的位置
        popWindow.showAtLocation(parent, Gravity.BOTTOM, 0, 0);
        //监听菜单的关闭事件
        popWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
            }
        });
        //监听触屏事件
        popWindow.setTouchInterceptor(new View.OnTouchListener() {
            public boolean onTouch(View view, MotionEvent event) {
                return false;
            }
        });
    }

    /**
     * 显示软键盘
     */
    private void popupInputMethodWindow() {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Service.INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
            }
        }, 0);

    }

    @Override
    public void onRequestSuccess(int requestCode) {
        try {
            if (dao.getStatus().equals("0")) {
                switch (requestCode) {
                    case CodeConst.COURSE_GET_COURSE_DISCUSS_PULLUP://获取列表数据  上拉请求
                        if (dao.getDiscussList() != null && !dao.getDiscussList().isEmpty()) {
                            //加载更多
                            adapter.loadmore(dao.getDiscussList());
                        } else {
                            //数据加载完成,没有更多数据,显示没有更多了
                            adapter.loadNoDataView();
                            linearLayoutManager.scrollToPositionWithOffset(maxLastPositon, -1);
                        }
                        break;
                    case CodeConst.COURSE_GET_COURSE_DISCUSS_PUSHDOWN://获取列表数据  下拉请求
                        discussList.setRefreshing(false);

                        if (dao.getDiscussList() != null && !dao.getDiscussList().isEmpty()) {
                            discussList.hideEmptyView();
                        } else {
                            //无数据处理
                            showNoData(NO_DATA);
                        }
                        //刷新数据
                        adapter.refresh(dao.getDiscussList());
                        if (dao.getDiscussList().size() > (PageConst.pageSize - 1))
                            //数据大于每页显示的条数,则加载更多数据
                            adapter.loadMoreDataView();
                        else {
                            //数据小于当前页的话则不显示加载更多,显示没有更多了
                            adapter.loadNoDataView();
                            linearLayoutManager.scrollToPositionWithOffset(maxLastPositon, -1);
                        }
                        break;
                    case CodeConst.COURSE_GET_COURSE_SEND_DISCUSS://发讨论
                        MessageUtils.showRightImageShortToast(getActivity(), "发送成功");
                        editText.setText(null);
                        popWindow.dismiss();
                        PageConst.pageNo = 1;//首页
                        if (isZonghe) {
                            //综合
                            getData(kcid, null, null, CodeConst.COURSE_GET_COURSE_DISCUSS_PUSHDOWN);
                        } else {
                            //章节
                            getData(kcid, pmlid, mlid, CodeConst.COURSE_GET_COURSE_DISCUSS_PUSHDOWN);
                        }
                        linearLayoutManager.scrollToPosition(0);
                        break;
                }
            } else {
                MessageUtils.showImageShortToast(getActivity(), dao.getStatusCode());
            }
        } catch (Exception e) {
            Log.e(e.getMessage(), e);
            MessageUtils.showImageShortToast(getActivity(), "请求数据异常");
        }
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        ButterKnife.reset(this);
        Arad.bus.unregister(this);
    }
}